(
function (db, $_) {
    
    var usersModel = db.cmodel().name("users").table("tb_users")
        .pk(function (field) {

            field.field("id").type("int").autoIncrement();

        }).field("name",function (field) {

            field.field("name").varchar(255).notNull();

        }).field("born",function (field) {

            field.field("born").date();

        }).field("credit",function (field) {

            field.field("credit").int().default(0).notNull();

        }).field("cards",function (field) {

            field.field("card_id").jionMany("cards").jionfield("user_id");

        });


    usersModel.query("born = #1 & name like #2 ",
        db.param("2018-01-02", "%tom%") );


    var filterObj = {
        bron : "2018-01-02",
        name : "tom"
    };
    usersModel.queryFilter(filterObj).datas();

    /*
        前端代码如下使用：
        需要完成一个搜索用户的功能，需要定义一个搜索表单对象，使用$_得到一个用户模型
     */
    var filterModel = $_.filterModel('users');

    //双向与前端功能绑定...
    //...代码省略

    var queryStr = filterModel.queryStr();

    if( "born=2018-01-09&name_like=tom" . query(queryStr) );//返回true


    /*
        需求：物联网系统中存在多个设备，不同设备存在多种设备类型.
     */


    var devModel = db.cmodel('dev').table('tb_dev').pk(function (model,pk) {
        pk.field('id').int().autoIncrement();
    })
        .field('name' ,function (model,field) {
            field
                .field('name')
                .varchar()
                .notNull();
        })
        .field('devType', function (model,field) {
            field
                .field('dev_type_id')//关联的字段名
                .int()
                .notNull()
                .jion('devType');//直接设置 jion对应的模块名称
        })
        .field('createUser', function (model,field) {
            field
                .field('create_user_id')//关联的字段名
                .int()
                .notNull()
                .jion('user');//直接设置 jion对应的模块名称
        })
    ;

    var devTypeModel = db.cmodel('devType').table('tb_dev_type').pk(function (model,pk) {
        pk.field('id').int().autoIncrement();
    })
        .field('band',function (model,field) {//品牌
            field
                .field('band')
                .varchar()
                .notNull();
        })
        .field('model',function (model,field) { //型号
            field
                .field('model')
                .varchar()
                .notNull();
        })
        .field('devs',function (model,field) { //一个设备类型有多个设备
            field
            .jions('devType').field('dev_type_id');
        })
        .field('fullName',function (model,field) { //自定义列，可以通过程序组装列名
            field
                .map(function (item,ix) {
                    return item.band + " " +item.model; //品牌加型号则为全名
                });
        })
    ;

    devModel.query("devType.name='SND'").vo('devType') //使用VO方法指定返回的数据输出带devType对象
        .data();

    devTypeModel.query("devs.name_like='%冲压%'") //查询有带冲二字的设备类型
        .vo('devs.createUser'); //关联的devs对象中也需要jion上创建用户对象



    
}
)({},{})